<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 使用for..of循环对象中的值，给对象部署默认的Symbol.iterator接口机制.
        // 第一步： 给对象部署默认的Symbol.iterator接口


        let obj = {
            name: "张三",
            sex: "男"
        }

        obj[Symbol.iterator] = function () {
            let keyarr = Object.keys(obj)
            let index = 0;
            return {
                next: function () {
                    if (index < keyarr.length) {
                        console.log(index)
                        return {
                            "value": {
                                key: keyarr[index],
                                val: obj[keyarr[index++]]
                            },
                            "done": false,
                        }

                    } else {
                        return {
                            "value": undefined,
                            "done": true
                        }
                    }
                }
            }
        }
        let iteobj = obj[Symbol.iterator]()

        console.log(iteobj.next());
        console.log(iteobj.next());
        console.log(iteobj.next());
        for (let key of obj) {
            console.log(key);
        }
        // console.log(obj.next());
        // 第二步:定义索引
        // 第三步：定义返回的next方法
        // 第四步:获取对象的长度(对象中可以把key或者val解析为数组)
        // 第五步:判断什么时候循环结束
        // 第六步:输出格式 {value:"值",done:"true/fasle"}
    </script>
</body>

</html>